/*Author: Bart*/
/*Deprecated*/

package br.ita.doacoes.core.campanha;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.ita.doacoes.domain.campanha.Campanha;

public class AccessCampanha implements DAO{
	
	private final String senha = "admin";
	private final String path = "jdbc:postgresql://localhost/doacoes";
	private final String user = "admin";
	
	static{
		try{
			Class.forName("org.postgresql.Driver");
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}

	}
	
	private Campanha getCampanha(ResultSet rs){
		
		Campanha ret = new Campanha();
		
		try {
			ret.setId_campanha(rs.getInt("id_campanha"));
			ret.setNome(rs.getString("nome"));
			ret.setDescricao(rs.getString("descricao"));
			ret.setData_inicio(rs.getDate("data_inicio"));
			ret.setData_termino(rs.getDate("data_termino"));
			ret.setAvaliacao(rs.getShort("avaliacao"));
			ret.setGasto_estimado(rs.getBigDecimal("gasto_estimado"));
			return ret;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return ret;
		
	}

	public void delete(int id) {
		
		Connection con = null;
		PreparedStatement stm = null;
		
		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("DELETE FROM campanha WHERE id = ?");
			stm.setInt(1, id);
			stm.execute();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

	public Object getById(int id){
		
		Campanha ret = null;
		Connection con = null;
		PreparedStatement stm = null;
		ResultSet rs = null;

		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("SELECT * FROM campanha WHERE id_campanha = ?");
			stm.setInt(1, id);
			rs = stm.executeQuery();
			
			if(rs.next()){
				
				ret = getCampanha(rs);
				
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}finally{

			try {
				rs.close();
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			
			
		}
		
		return ret;
	}

	public List <Campanha> getList() {
		
		List <Campanha> lista = new ArrayList<Campanha>();
		Connection con = null;
		PreparedStatement stm = null;
		ResultSet rs = null;
		
		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("SELECT * FROM campanha ORDER by data_inicio DESC");
			rs = stm.executeQuery();
			
			while(rs.next()){
				Campanha d = getCampanha(rs);
				lista.add(d);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}finally{
			
			try {
				rs.close();
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			
		}

		return lista;
	}
	
	public List <Campanha> getByField(Object obj) {
		
		List <Campanha> lista = new ArrayList<Campanha>();
		Connection con = null;
		PreparedStatement stm = null;
		ResultSet rs = null;
		Campanha c = (Campanha) obj;
		String query = new String("true ");
		
		if(c.getNome() != null){
			query += "and" + " nome = " + "'" + c.getNome() + "'";
		}
		if(c.getDescricao() != null){
			query += "and" + " descricao = " + "'" + c.getDescricao() + "'";
		}
		if(c.getData_inicio() != null){
			query += "and" + " data_inicio = " + "'" + c.getData_inicio().toString() + "'";
		}
		if(c.getData_termino() != null){
			query += "and" + " data_termino = " + "'" + c.getData_termino().toString() + "'";
		}
		if(c.getGasto_estimado() != null){
			query += "and" + " gasto_estimado = " + c.getGasto_estimado().toPlainString();
		}
		
		/*
		if(!query.equals("true")){
			query = query.substring(8, query.length()-1);
		}
		*/
		
		//System.out.println(query + " ola");
		
		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("SELECT * FROM campanha WHERE " + query +  " ORDER by data_inicio DESC");
			rs = stm.executeQuery();
			
			while(rs.next()){
				Campanha d = getCampanha(rs);
				lista.add(d);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}finally{
			
			try {
				rs.close();
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			
		}

		return lista;
	}

	public void insert(Object obj) {
		
		Connection con = null;
		PreparedStatement stm = null;
		Campanha d = (Campanha) obj;
		
		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("INSERT INTO campanha(id_campanha,nome,descricao,data_inicio,data_termino,avaliacao,gasto_estimado) VALUES(?,?,?,?,?,?,?)");
			stm.setInt(1, d.getId_campanha());
			stm.setString(2,d.getNome());
			stm.setString(3, d.getDescricao());
			stm.setDate(4, d.getData_inicio());
			stm.setDate(5, d.getData_termino());
			stm.setShort(6, d.getAvaliacao());
			stm.setObject(7, d.getGasto_estimado());
			stm.execute();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

	public void update(Object obj) {
		
		Connection con = null;
		PreparedStatement stm = null;
		Campanha d = (Campanha) obj;
		
		try {
			con = DriverManager.getConnection(path,user,senha);
			stm = con.prepareStatement("UPDATE campanha SET nome = ?, descricao = ?, data_inicio = ?, data_termino = ?, avaliacao = ?, gasto_estimado = ? WHERE id_campanha = ?");
			stm.setString(1, d.getNome());
			stm.setString(2, d.getDescricao());
			stm.setDate(3, d.getData_inicio());
			stm.setDate(4, d.getData_termino());
			stm.setShort(5, d.getAvaliacao());
			stm.setBigDecimal(6, d.getGasto_estimado());
			stm.setInt(7, d.getId_campanha());
			stm.execute();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				stm.close();
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
}
